package bean.juego;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import util.Dummies;

public class JuegoFactory {

    private static final Logger logger = Logger.getLogger(JuegoFactory.class.getName());
	private static JuegoFactory instancia = new JuegoFactory();
	private static final String[] juegoTipos = new String[]{
		"Free For All",
		"Tournament",
		"Single Player Deathmatch",
		"Team Deathmatch",
		"Capture The Flag",
		"One Flag Capture",
		"Overload",
		"Harvester",
		"Elimination",
		"CTF Elimination",
		"Last Man Standing",
		"Double Domination",
		"Domination"
	};


	private JuegoFactory() {
	}

	public static JuegoFactory getInstancia() {
		return instancia;
	}

	public Juego getJuego(String lineaInicial) {

        if (lineaInicial == null || lineaInicial.length() == 0) {
            throw new NullPointerException("lineaInicial can not be null or empty");
        }

		lineaInicial = lineaInicial.substring(lineaInicial.indexOf("\\") + 1);
		Map<String, String> parametrosJuego = new HashMap<String, String>();

		String[] split = lineaInicial.split("\\\\");
		for (int i = 0; i < split.length / 2; i++) {
			parametrosJuego.put(split[2 * i], split[2 * i + 1]);
		}

		String tipoJuegoS = parametrosJuego.get(ParametrosJuego.g_gametype.toString());

		int tipoJuego = (tipoJuegoS == null) ? -1 : Integer.parseInt(tipoJuegoS);

		if (tipoJuego < 0 || tipoJuego >= juegoTipos.length) {
			logger.log(Level.SEVERE, "{0} invalido: {1}", new Object[]{ParametrosJuego.g_gametype, tipoJuegoS});
			return Dummies.juegoDummy;
		}

		switch (tipoJuego) {
		case 4:
			return new JuegoCTF(parametrosJuego);
		default:
			logger.log(Level.WARNING, "Tipo de Juego desconocido: {0}", juegoTipos[tipoJuego]);
			return Dummies.juegoDummy;
		}

	}
}
